// 5.4. 常量-字符常量
/**
 * 
 * 常量是固定值，在程序执行期间不会改变。这些固定的值，又叫做字面量。
 * 常量可以是任何的基本数据类型，可分为整型数字、浮点数字、字符、字符串和布尔值。
 * 常量就像是常规的变量，只不过常量的值在定义后不能进行修改。
 * 
 * 字符常量是括在单引号中。如果常量以 L（仅当大写时）开头，则表示它是一个宽字符常量（例如 L'x'），此时它必须存储在 wchar_t 类型的变量中。否则，它就是一个窄字符常量（例如 'x'），此时它可以存储在 char 类型的简单变量中。

字符常量可以是一个普通的字符（例如 'x'）、一个转义序列（例如 '\t'），或一个通用的字符（例如 '\u02C0'）。

在 C++ 中，有一些特定的字符，当它们前面有反斜杠时，它们就具有特殊的含义，被用来表示如换行符（\n）或制表符（\t）等。下表列出了一些这样的转义序列码：

\\	\ 字符
\'	' 字符
\"	" 字符
\?	? 字符
\a	警报铃声
\b	退格键
\f	换页符
\n	换行符
\r	回车
\t	水平制表符
\v	垂直制表符
\ooo	一到三位的八进制数
\xhh . . .	一个或多个数字的十六进制数
*/
#include <iostream>

int main(void)
{
  // 控制台显示乱码纠正

  // system("chcp 65001"); //设置字符集 UTF-8
  // system("chcp 936");   //设置字符集 GBK
  /**
   * 注：CHCP是一个计算机指令，能够显示或设置活动代码页编号。
   * 代码页 描述
   * 65001   UTF-8代码页
   * 950繁体中文
   * 936简体中文默认的GBK
   * 437 MS-DOS美国英语
   * 但是通过CHCP设置编码是治标不治本的
   * 想永久的更改cmd编码值需要修改注册表
  */

  char c1 = 'x';     // 普通字符
  wchar_t c2 = L'x'; // 宽字符

  char c3 = '\u02C0'; // 通用字符 (\u02C0)，需要设置tasks.json args 中 -fexec-charset=utf-8
  char c4 = '\a';     // 转义字符（警报铃声）
  char c5 = '\ooo';   // 转义字符（一到三位的八进制数

  std::cout << "测试中文" << '\n'
            << "c1:\t" << c1 << '\n'
            << "c2:\t" << c2 << '\n'
            << "c3:\t" << c3 << '\n'
            << "c4:\t" << c4 << '\n'
            << "c5:\t" << c5 << std::endl; // 0 ??

  printf("-------------end----------\n");
  return 0;
}